//
//  Eyepiece+Input.swift
//  WatermarkCamera
//
//  Created by AxcLogo on 4/7/2024.
//

import UIKit
import Foundation

// MARK: - 输入

extension Eyepiece {
    /// 输入类型
    /// 作为图形处理管线中的第一步
    /// 图形源的起始点
    enum InputType {
        // 图片

        // 一般多用于处理现成的图片

        // 也可以处理普通相机拍摄后的图片

        // 但一般情况下，建议使用该Api处理相册中现成的图片

        // 相机拍照、视频建议使用camera，性能更高一些，而且是实时渲染处理

        case image(_ image: UIImage)

        // 视频文件

        // 用于处理现成的视频文件

        // 也可以处理普通相机录制后的视频

        // 但一般情况下，建议使用该Api处理相册中现成的视频

        // 相机拍照、视频建议使用camera，性能更高一些，而且是实时渲染处理

        case videoFile(_ filePath: String)

        // 相机输入

        // 创建输入的相机，内部通过实时采集Buffer渲染

        // 输出的图像流是已经渲染处理完成的流

        case camera(_ camera: Camera)
    }

    /// 设置输入类型
    func setInput(_ inputType: InputType) {
        self.inputType?.gpuImageOutput?.removeAllTargets() // 移除预处理滤镜

        self.inputType = inputType

        inputType.gpuImageOutput?.addTarget(inputFilterGroup) // 设置输入到预处理滤镜
    }
}

extension Eyepiece.InputType {
    /// 获取GPUImage的输出流
    var gpuImageOutput: GPUImageOutput? {
        var output: GPUImageOutput?

        switch self {
        case let .image(image):

            let picture = GPUImagePicture(image: image)

            picture?.processImage()

            output = picture

        case .videoFile:

            break

        case let .camera(camera):

            output = camera.gpuCamera
        }

        return output
    }
}
